Bonjour. Ceci est une propagande pour Typst. Vous devez utiliser Typst. Vous souhaitez utiliser Typst. Vous ne voulez plus utiliser Latex. Vous n'écoutez plus que le son de ma voix, qui vous dit d'utiliser Typst. Vous allez supprimer votre compte Overleaf. Vous êtes hypnotisés par ma voix, qui vous dit d'utiliser Typst. Vous allez supprimer Texstudio. Vous ne pensez plus qu'à utiliser Typst.
Vous êtes complètement sous mon contrôle, et vous allez utiliser Typst pour tous vos documents.
...
Bon ma tentative d'hypnose ne semble pas trop fonctionner. Donc plutôt que de vous hypnotiser, je vais vous dire pourquoi vous devriez utiliser Typst, et pourquoi pas :D
C'est un langage de balisage, soit un langage spécialisé dans l'enrichissement d'information textuelle (https://fr.wikipedia.org/wiki/Langage_de_balisage).
C'est comme du Markdown, mais bien plus puissant. C'est comme du Latex, mais facile à lire et écrire.
Tu écris un .typ, dans un language de balisage qui ressemble à du markdown mais en bien plus poussé, et tu obtiens un PDF, PNG ou SVG tout beau tout propre.
Fini les .tex illisibles, les gros packages à installer. Sur typst, un fichier texte random peut déjà être compilé en un texte basique. Il est ensuite facile d'y ajouter des titres, des éléments de mise en page, des images... Et il est tout à fait possible de faire des choses plus complexes grâce à la programmation intégrée.
Et enfin, le compilateur est plutôt léger ! (et c'est du rust!!! :D)
Voici un exemple basique:
Résultat:

On y voit déjà plusieurs choses intéressantes.
D'abord, les titres sont indiqués par des =. Un = correspond à un titre de niveau 1, deux == à un titre de niveau 2, etc... Comme le markdown et les #.
Ensuite, on voit un #lorem(). Le # indique un passage en mode "code", ce qui le suit est interprété comme du code dans le langage de programmation de typst.
Ici, c'est la fonction lorem qui est appelée, qui génère du texte placeholder. C'est une fonction intégrée à typst, il en existe plein d'autres pour faire plein de choses différentes. Par exemple, #image("path/to/image.png") permet d'insérer une image dans le document. Le language de programmation est assez complet, avec des boucles, des conditions, des variables...
Ensuite, on voit du balisage très similaire au markdown pour tout ce qui est texte en gras, italique, souligné, barré, etc... Par exemple, *gras* pour du gras, _italique_ pour de l'italique...
Certaines fonctionnalités plus avancées ne sont pas incluses dans les balises classiques et nécessitent un appel de fonction. Par exemple, pour barrer du texte, il faut utiliser #strike([]). Les crochets en typst indiquent que ce qui est à l'intérieur doit être traité comme du "markup", et non pas comme du code. Car ce qui suit un # est traité comme du code, et ne sera donc pas mis en forme, et posera même des soucis de compilation ! Par exemple, #strike([du texte *en gras*]) est parfaitement valide, alors que #strike du texte *en gras* ne compile pas du tout. #strike("du texte *pas en gras*") compile, mais n'affiche pas le texte en gras, car les guillemets indiquent que ce qui est à l'intérieur doit être traité comme une string classique, et non pas comme du "markup".
De même, il est possible de personnaliser plein de choses avec des appels de fonctions. Il peut s'agir de la police utilisée, des couleurs, des numérotations des titres, de la configuration de la page... Mais tant qu'il n'y a pas besoin de présentation complexe, leur usage est très simple !
Pour les maths, la syntaxe est plus intuitive que latex. Par exemple, pour faire une fraction, on écrit a/b au lieu de \frac{a}{b}. Pour faire une racine carrée, on écrit sqrt(x) au lieu de \sqrt{x}. Les parenthèses permettent à la fois d'afficher des parenthèses ET indiquent au compilateur que ce qui est à l'intérieur doit être traité comme un groupe. Par exemple, 1/1+x est interprété directement comme 1/(1+x), mais Typst sait que les parenthèses ne vont pas être utiles lors de l'affichage en fraction alors il les efface. Pour forcer l'affichage, il suffit de mettre des parenthèses supplémentaires: 1/((1+x)).
Un exemple pour Fibonacci:

Résultat:

Il existe l'app officielle en ligne https://typst.app/, facile à utiliser.
Sinon pour le compilateur en CLI, il n'est malheureusement pas encore sur les dépôts de Debian et Ubuntu, mais pour Arch, Opensuse et d'autres, il suffit d'utiliser votre gestionnaire de paquets. Il existe aussi en paquet Snap si vous utilisez cette technologie. Je vous invite à aller vérifier ça: https://typst.app/open-source/. Sinon, il est possible de l'installer avec cargo install --locked typst-cli.
Bon malheureusement ce super soft n'est pas parfait non plus. Quelques défauts qui m'agacent le plus: - La documentation est un peu légère. Il y a une référence complète, c'est bien, mais c'est pas nécessairement agréable d'y chercher des choses et tout n'est pas clair. Et comme ça n'a pas la popularité de Latex, il n'y a pas de tonnes de tutoriels et posts sur internet pour apprendre à faire des trucs spécifiques. De même, le typst produit par les IA est parfois faux. J'espère que ça va s'améliorer avec le temps. - Le frontend officiel est closed source et exclusivement en ligne. Il existe bien un compilateur en ligne de commande open source, ainsi qu'un language serveur (pour faire tourner une extension VSCode ou vim par exemple), mais ça n'offre pas la collaboration en temps réel et la praticité du super frontend officiel. - L'export en HTML est expérimental. C'est quelque chose qui aurait pu me servir quelques fois. En attendant, il y a les formats PDF, PNG et SVG en sortie. - Pas de mode "slides" officiel. Il existe un paquet communautaire: https://typst.app/universe/package/typslides/, mais je ne l'ai pas testé.
Bon, je n'avais pas prévu d'écrire un article aussi long, je pensais que l'hypnose fonctionnerait :D
Typst ne pourra pas remplacer tous les usages de Latex, mais pour des documents simples et rapides à faire, c'est vraiment top. Par exemple, je l'utilise pour tous mes documents de maths et de physique faits sur ordinateur, et on l'utilise à Rezel pour nos documents.
- Le Bretzel en chef